﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sistema_Totem.Datos.SqlServer;
using Sistema_Totem.Logica.Clases.ElementosWeb;

namespace Sistema_Totem.Logica.Clases
{

    /// <summary>
    /// Seccion de una PLANTILLA.
    /// </summary>
    public class Seccion
    {
        #region Atributos

        //Atributos:

        private int id;
        private string nombre;
        private string descripcion;
        private int orden;
        private string estatusActivado;

        //Lista de Elementos:
        private List<Elemento> miListaElementos = new List<Elemento>();


        #endregion Atributos


        //Constructor:
        #region Constructores


        /// <summary>
        /// CONSTRUCTOR POR DEFECTO
        /// </summary>
        public Seccion()
        {
            this.id = 0;
            this.nombre = "";
            this.descripcion = "";
            this.orden = 0;
            this.estatusActivado = "TRUE";
            //this.miListaElementos = listaElementos;
        }

        /// <summary>
        /// Constructor mas recomendado:
        /// </summary>
        public Seccion(int id, string nombre, string descripcion, int orden, string estatusActivado, List<Elemento> listaElementos)
        {
            this.id = id;
            this.nombre = nombre;
            this.descripcion = descripcion;
            this.orden = orden;
            this.estatusActivado = estatusActivado;
            this.miListaElementos = listaElementos;
        }

        #endregion Constructores



        #region Gets y Sets

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        public int Id
        {
            get { return id; }
            set { id = value; }
        }

        public int Orden
        {
            get { return orden; }
            set { orden = value; }
        }

        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        public string EstatusActivado
        {
            get { return estatusActivado; }
            set { estatusActivado = value; }
        }

        public List<Elemento> MiListaElementos
        {
            get { return miListaElementos; }
            set { miListaElementos = value; }
        }

        #endregion Gets y Sets


        #region Metodo Equals

        public override bool Equals(object obj)
        {

            if (obj == null || GetType() != obj.GetType())
            {
                return false;
            }

            //Copia del objeto a Plantilla:
            Seccion seccionCompara = (Seccion)obj;

            //listas de elementos:
            //seccionCompara.miListaElementos = new List<Elemento>();

            return ((this.id == seccionCompara.id) && (this.nombre == seccionCompara.nombre) && (this.descripcion == seccionCompara.descripcion) && (this.estatusActivado == seccionCompara.estatusActivado) && this.miListaElementos.Equals(seccionCompara.miListaElementos));

        }//end public override bool Equals(object obj)

        #endregion Metodo Equals



        #region Metodos Seccion

        #region Grupo 1 - Cargar Elementos de la Seccion

        public List<Elemento> CargarElementos(int idProyecto)
        {
            SqlServerPropuesta acceso = new SqlServerPropuesta();
            List<Datos.ClasesDominio.Elemento> formas = new List<Datos.ClasesDominio.Elemento>();
            formas = acceso.ConsultarElementosParticulares(id, idProyecto);
            string tipo;
            Elemento objeto= null;
            foreach (Datos.ClasesDominio.Elemento forma in formas)
            {
                tipo = forma.TipoElemento;
                switch (tipo)
                {
                    case "TextBox":  objeto = new TextBoxTotem();
                        break;
                    case "CheckBoxList": objeto = new CheckBoxListTotem();
                        break;
                    case "CheckBox": objeto = new CheckBoxTotem();
                        break;
                    case "RadioButtonList": objeto = new RadioButtonListTotem();
                        break;
                    case "RadioButton": objeto = new RadioButtonTotem();
                        break;
                    case "DropDownList": objeto = new DropDownListTotem();
                        break;
                    case "ListBox": objeto = new ListBoxTotem();
                        break;
                  /*  case "Calendar": objeto = new CalendarTotem();
                        break;
                    case "FileUpload": objeto = new FileUploadTotem();
                        break; */
                    case "Label": objeto = new LabelTotem();
                        break;

                }
                objeto.Id = forma.IdElemento;
                objeto.Nombre = forma.NombreElemento;
                objeto.OrdenE = forma.Orden;
                objeto.Obligatoriedad = forma.Obligatoriedad;
                objeto.TipoDato = objeto.TipoDato;
                miListaElementos.Add(objeto);
            }
		

            return miListaElementos;

        }
        #endregion Grupo 1 - Cargar Elementos de la Seccion

        #region Grupo 1 - Ordenar Elementos de la Seccion

        public List<Elemento> OrdenarElementos()
        {
           miListaElementos.Sort(Elemento.CompararElemento);
           return MiListaElementos;

        }
        #endregion Grupo 1 - Ordenar Elementos de la Seccion
        
        #region Grupo 1 - Comparar Secciones

        public static int CompararSeccion(Seccion x, Seccion y)
        {
            return x.orden.CompareTo(y.orden);
        }
        #endregion Grupo 1 - Comparar Secciones
        
        #endregion Metodos Seccion


    }
}